﻿namespace Didaku.Net.Interfaces
{
    /// <summary>
    /// 描述Socket服务的消息头。
    /// <remarks>
    /// 如果使用，那么所有的发送和接收处理均需要创建一个标记消息头和消息长度的数据包，
    /// 这个数据包使用如下标签结构： 
    /// ----------------------------------------
    /// ~~~~~~~ 标记中消息头 ~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~ 数据长度 ~~~~~~~~~~~~~~ | ~~ 数据......
    /// Byte[0] | Byte[1] | Byte[2] ... Byte[n] | Byte[0] | Byte[1] | Byte[2] | Byte[3] | .............
    /// ----------------------------------------
    /// 第一个标签部分是Socket服务消息头，它是任意长度的字节数组。
    /// 需要注意：如果选择一个非常小的消息头，可能在其它地方有一个同样的字节数组，
    /// 那么主机将遗弃该序列；如果选择一个很长的字节数组，主机需要消耗一些处理器
    /// 时间来验证消息头是否与当前Socket服务一致。
    /// 第二部分是数据包长度，它由原生数据缓冲区长度、加密与/或压缩数据长度以及消息头长度计算得到。
    /// </remarks>
    /// </summary>
    public interface IProtocolHead
    {
        byte[] Head { get; }
    }
}
